---
title: "Accidentes de transito en CR entre 2016-2022"
output: html_notebook
---

```{r, echo = FALSE}
data <- read.csv("accidentes_transito_con_victimas_2016_2022.csv", sep = ";")
```

```{r, echo = FALSE, warning = FALSE}
library(dplyr)
library(ggplot2)
library(plotly)
library(colorspace)
library(treemapify)
```

```{r, echo=FALSE, message = FALSE}
#obtenemos los meses, dias y la ruta donde
#mas accidentes hay
meses_dias_RU_mas_accidentes <- data %>%
  filter(grepl("^[A-L]\\..*\\s(Enero|Febrero|Marzo|Abril|Mayo|Junio|Julio|Agosto|Setiembre|Octubre|Noviembre|Diciembre)$", Mes)) %>%
  filter(grepl("^[1-7]\\.(Domingo|Lunes|Martes|Miércoles|Jueves|Viernes|Sábado)$", Día)) %>%
  group_by(Mes,Día,Ruta) %>%
  summarise(MDtotal_accidentes = n()) %>%
  arrange(desc(MDtotal_accidentes))

registros_mas_frecuentes <- meses_dias_RU_mas_accidentes %>%
  group_by(Mes) %>%
  slice(1)
  
numero_mes <- seq(1, 12, length.out = nrow(registros_mas_frecuentes))
numero_mes <- as.integer(numero_mes)
registros_mas_frecuentes <- cbind(registros_mas_frecuentes, NumeroMes = numero_mes)

# Crear una columna para el número de día según el día de la semana en registros_mas_frecuentes
registros_mas_frecuentes$ColorDia <-ifelse(registros_mas_frecuentes$Día == "1.Domingo", "blue",
                                            ifelse(registros_mas_frecuentes$Día == "2.Lunes", "red",
                                            ifelse(registros_mas_frecuentes$Día == "3.Martes", "yellow",
                                            ifelse(registros_mas_frecuentes$Día == "4.Miércoles", "cyan",
                                            ifelse(registros_mas_frecuentes$Día == "5.Jueves", "darkgreen",
                                            ifelse(registros_mas_frecuentes$Día == "6.Viernes", "brown",
                                            ifelse(registros_mas_frecuentes$Día == "7.Sábado", "black", NA)))))))

registros_mas_frecuentes$idRuta <-ifelse(registros_mas_frecuentes$Ruta == "Cantonal", 1)
                                          
registros_mas_frecuentes$Mes <- gsub("[A-L]\\.", "", registros_mas_frecuentes$Mes)

registros_mas_frecuentes$Día <- gsub("[1-7]\\.", "", registros_mas_frecuentes$Día)

```

```{r, echo = FALSE}
grafico_chernoff <- ggplot(registros_mas_frecuentes, aes(x = NumeroMes, y = idRuta,label1 = Mes,label2 = Ruta,label3 = Día)) +
  geom_point(size = 9,colour = registros_mas_frecuentes$ColorDia) +
  labs(x = "Mes",y = "Ruta") +
  geom_text(aes(label = "👁️ 👁️"),vjust = -5, size = 3)+  
  geom_text(aes(label = "👄"), vjust = 5, size = 2) +
  theme_bw()

# Convertimos el gráfico ggplot2 en uno interactivo con plotly
grafico_interactivo <- ggplotly(grafico_chernoff,tooltip = c("label1", "label2", "label3"))

# Mostramos el gráfico interactivo
grafico_interactivo

# 12 caras por los meses, color cara dias ... y tamanho cara ruta
```

```{r,echo=FALSE}
ruralUrbano_mas_accidentes<-data %>%
  group_by(Rural.o.urbano)%>%
  summarise(RUtotal_accidentes = n()) %>%
  arrange(desc(RUtotal_accidentes))
# desde 2016 hastas 2022
```

```{r,echo=FALSE}
labels = ruralUrbano_mas_accidentes$Rural.o.urbano
values = ruralUrbano_mas_accidentes$RUtotal_accidentes

fig1 <- plot_ly(type='pie', labels=labels, values=values, 
               textinfo='label+percent',
               insidetextorientation='radial')
fig1 <- fig1 %>% layout(title = 'Accidentes por ruta entre 2016-2022')

```

```{r,echo=FALSE}
#y =mideplan x= canton
#tener canton con mas y menos accidentes
region_canton_mas_accidentes<-data%>%
  group_by(Región.Mideplan, Cantón)%>%
  summarise(RCtotal_accidentes = n(),.groups = "drop")

region_canton_mas_accidentes<-region_canton_mas_accidentes%>%
  group_by(Región.Mideplan, Cantón)%>%
  summarise(max_valor = max(RCtotal_accidentes),.groups = "drop")%>%
  arrange(max_valor)

# Número de colores deseado
n_colores <- 176

# Generar la paleta de colores

paleta_colores <-rainbow_hcl(n_colores) # Ejemplo de colores base
```

```{r,echo=FALSE}

fig <- plot_ly(region_canton_mas_accidentes, x = ~Región.Mideplan, y = ~max_valor, marker = list(color=paleta_colores) , type = 'bar',hovertemplate = ~paste("Región: ", Región.Mideplan, "<br>Cantón: ", Cantón, "<br>Valor: ", max_valor,
      "<extra></extra>"))

fig <- fig %>% layout(yaxis = list(title = ''),xaxis=list(title = ''), barmode = 'stack')

fig
```

```{r, echo = FALSE}
anioCTG<-data %>%
  group_by(Año,Tipo.de.circulación,Estado.del.tiempo,Clase.de.accidente) %>%
  summarise(NumeroAccidentes=n(),.groups="drop")

anioCTG<-anioCTG%>%
  group_by(Año,Tipo.de.circulación,Estado.del.tiempo,Clase.de.accidente)%>%
  summarise(Accidentes = min(NumeroAccidentes),.groups = "drop")%>%
  arrange(Accidentes)
anioCTG<-anioCTG%>%
  rename(Circulacion = Tipo.de.circulación)%>%
  rename(Clima = Estado.del.tiempo)%>%
  rename(Gravedad = Clase.de.accidente)

anioCTG$Año<-substr(anioCTG$Año, start = 3, stop = nchar(anioCTG$Año))
#elimino el 20 del año para que sea mejor la respresentación textual
#o sea en vez de 2016 sale 16
```

```{r,echo=FALSE}
faceInteractivo <- ggplot(anioCTG, aes(x=Circulacion, y=Accidentes, color=Clima, group=Gravedad)) +
    geom_point()+
    labs(x="Tipo de circulación",y="Cantidad accidentes",colour=" Estado del clima")+
  scale_y_continuous(limits = c(0, 2600), breaks = c(0, 2600))+
  theme(axis.text.x = element_text(angle = -45, hjust = 0),axis.text.y = element_text(angle=12))+
    facet_grid(Año ~ ., scale = "free_x",space = "free")
    

ggplotly(faceInteractivo)
```

```{r, echo = FALSE}
# Calcular la cantidad de accidentes por año
frecuencia_año <- table(data$Año)

# Crear un frame de datos con la frecienca y el año
datos_frecuencia_año <- data.frame(
  Año = names(frecuencia_año),
  Accidentes = as.numeric(frecuencia_año)
)

# Crear el grafico con un punto por cada año
puntos_año <- ggplot(datos_frecuencia_año, aes(x = Año, y = Accidentes, color = Año)) +
  geom_point(size = 5) +
  scale_x_discrete(breaks = NULL) +
  labs(y = "# de accidentes", 
       title = "Cantidad de accidentes por año") +
  theme(axis.title.x = element_blank(),
        axis.text.x = element_blank())

puntos_años_interactiva <- ggplotly(puntos_año)
```

```{r, echo = FALSE}
barras_hora <- ggplot(data, aes(x = Hora.recodificada, fill = Hora.recodificada)) +
  geom_bar() +
  labs(title = "Accidentes por año y por Hora recodificada",
       x = "Hora Recodificada", y = "# de accidentes", fill = "Año / Rango horario") +
  theme(axis.text.x = element_blank())

barras_hora_interactiva <- ggplotly(barras_hora)
```

```{r, echo = FALSE}
barras_tipo_clase <- ggplot(data, aes(x = Tipo.de.accidente, fill = Clase.de.accidente)) +
  geom_bar() +
  labs(title = "Tipos de heridos por tipo de accidente entre 2016-2022",
       x = "Tipo de accidente", y = "# de accidentes", fill = "Tipo de heridos") +
  theme(axis.text.x = element_text(angle = 315, hjust = 0))

ggplotly(barras_tipo_clase)
```

```{r,echo=FALSE}
datos_multidimensionales<-data%>%
  filter(grepl("^[1-7]\\.(Domingo|Lunes|Martes|Miércoles|Jueves|Viernes|Sábado)$", Día)) %>%
  group_by(Hora.recodificada,Día,Estado.del.tiempo,Tipo.de.calzada,Tipo.de.circulación)%>%
  summarise(accidentes=n(),.groups = "drop")

datos_multidimensionales$Día <- gsub("[1-7]\\.", "", datos_multidimensionales$Día)
  
```


```{r,echo=FALSE}
axis = list(showline=FALSE,
            zeroline=FALSE,
            gridcolor='#ffff',
            ticklen=1)

matrizD <- datos_multidimensionales %>%
  plot_ly() 
matrizD <- matrizD %>%
  add_trace(
    type = 'splom',
    dimensions = list(
      list(label='Día',values=~Día),
      list(label='Tránsito',values=~Tipo.de.circulación),
      list(label='Hora',values=~Hora.recodificada),
      list(label='Vía',values=~Tipo.de.calzada),
      list(label='Clima',values=~Estado.del.tiempo)
    )
  )
matrizD <- matrizD %>%
  layout(
    title= 'Accidentes del 2016-2022 evaluando distintos factores',
    hovermode='closest',
    dragmode= 'select',
    plot_bgcolor='rgba(240,240,240, 0.95)',
    xaxis=list(domain=NULL, showline=F, zeroline=F, gridcolor='#ffff', ticklen=4),
    yaxis=list(domain=NULL, showline=F, zeroline=F, gridcolor='#ffff', ticklen=4),
    xaxis2=axis,
    xaxis3=axis,
    xaxis4=axis,
    yaxis2=axis,
    yaxis3=axis,
    yaxis4=axis
  )

matrizD <- matrizD %>%
  layout(
  xaxis = list(tickvals = NULL, ticktext = NULL),
  xaxis2 = list(tickvals = NULL, ticktext = NULL),
  xaxis3 = list(tickvals = NULL, ticktext = NULL),
  xaxis4 = list(tickvals = NULL, ticktext = NULL),
  xaxis5 = list(tickvals = NULL, ticktext = NULL),
  yaxis = list(tickvals = NULL, ticktext = NULL),
  yaxis2 = list(tickvals = NULL, ticktext = NULL),
  yaxis3 = list(tickvals = NULL, ticktext = NULL),
  yaxis4 = list(tickvals = NULL, ticktext = NULL),
  yaxis5 = list(tickvals = NULL, ticktext = NULL)
)
matrizD


```

```{r, echo = FALSE}
grafica_de_graficas <- subplot(puntos_años_interactiva, barras_hora_interactiva, nrows = 2)

grafica_de_graficas
```